ChatGPTにテストコード(Jest)を渡すだけでAmazon DynamoDBにクエリをするコードを書いてもらえました
こんにちは、CX事業本部 IoT事業部の若槻です。
まずは次の動画をご覧ください。
何をしているかと言うと、今世界を大きく揺るがしているChatGPTにテストコード(Jest)を渡して、SDKを使ってAmazon DynamoDBにクエリをするコードを書いてもらった様子です。
この時ChatGPTに渡したテキストです。
Jestを使用した下記のテストコードの実行が成功する関数を記述して。 ```js const DATA_TABLE_NAME = 'dummy-dataTable'; process.env.DATA_TABLE_NAME = DATA_TABLE_NAME; import { mockClient } from 'aws-sdk-client-mock'; import { QueryCommand, } from '@aws-sdk/client-dynamodb'; import { dynamodbClient, queryDataItemList, } from '../../../src/lambda/infrastructures/dynamodb/dynamodb-floor-table'; const dynamodbMock = mockClient(dynamodbClient); beforeEach(() => { dynamodbMock.reset(); }); test('queryDataItemList', async (): Promise<void> => { dynamodbMock.on(QueryCommand).resolves({ Items: [ { companyId: { S: '01' }, employeeId: { S: '02' }, count: { N: '10' }, }, ], }); const result = await queryDataItemList('01'); const callsOfGet = dynamodbMock.commandCalls(QueryCommand); expect(callsOfGet.length).toBe(1); expect(callsOfGet[0].args[0].input.TableName).toEqual(DATA_TABLE_NAME); expect(callsOfGet[0].args[0].input.ExpressionAttributeValues).toEqual({ ':companyId': { S: '01' }, }); expect(callsOfGet[0].args[0].input.KeyConditionExpression).toEqual( 'companyId = :companyId', ); expect(result).toEqual([ { companyId: '01', employeeId: '02', count: 10, }, ]); }); ```
ChatGPTからの返信がこちらです。
``` import { DynamoDB } from 'aws-sdk'; const dynamodbClient = new DynamoDB.DocumentClient(); export async function queryDataItemList(companyId) { const params = { TableName: process.env.DATA_TABLE_NAME, KeyConditionExpression: 'companyId = :companyId', ExpressionAttributeValues: { ':companyId': companyId } }; try { const response = await dynamodbClient.query(params).promise(); const items = response.Items.map(item => { return { companyId: item.companyId, employeeId: item.employeeId, count: item.count } }); return items; } catch (error) { console.log(error); throw error; } } ``` このように、queryDataItemList関数が実装されます。AWS SDKのDynamoDB DocumentClientを使用して、DynamoDBのテーブルからデータを取得し、必要な形式に変換して返却します。 もし、上記のテストコードが実行された時に、queryDataItemList関数を使用し、必要な結果が返却されることが確認できるでしょう。
エラーキャッチまで付いた実用的なコードを得ることができました。私自身が書くよりも早く、そして丁寧なコードです。
願わくば、AWS SDK for JavaScript v3を使用し、TypeScriptで記述してくれるのがベストだった(なので上記コードは若干の手直しが必要です)のですが、これは質問文の書き方次第でどうにでもなりそうです。
試行錯誤
ChatGPTに渡したテキストの冒頭文の試行錯誤が少しありました。Jestを使用した下記のテストコードの実行が成功する関数を教えて。
と聞いた場合には関数のコードではなく、テストコードの説明が返ってきました。また試行するたびに異なる答えとなりました。
試行その1
試行その2
試行その3
しかし、上記文章はもし私が「このコードを説明して?」「使い方は?」と聞かれた時に、この内容をそのまま読み上げれば事足りるほどの自然な文章です。
おわりに
ChatGPTにテストコード(Jest)を渡すだけでAmazon DynamoDBにクエリをするコードを書いてもらえました。
今まで翻訳や音声認識サービスなどでAIを日常的に使っているつもりでしたが、ここまでシンギュラリティ(技術的特異点)というものを強く覚えたのは初めてでした。Microsoftが巨額の投資をしたのも頷けます。
参考
以上